'use strict'
const http = require('http')

let html = `
    <!DOCTYPE html>
    <html>
        <head>
            <title>First Server</title>
        </head>
        <body>
            <div>Node.js in service.</div>
        </body>
    </html>
`
let routerTable = {

    '/' : async (request, response) => {
        response.setHeader('content-type',
                  'text/html; charset=utf-8')
  
        response.end(html)
    },
  
    '/x/y' : async (request, response) => {
      response.end('-- ok --')
    },
  
    '/x/y/z' : async (request, response) => {
        let bufferList = []
        let totalLength = 0
        
        request.on('data', chunk => {
          totalLength += chunk.length
          bufferList.push(chunk)
        })
      
        let bodyData = null
      
        request.on('end', () => {
            if (bufferList.length > 0)
                bodyData = Buffer.concat(bufferList, totalLength);
      
            bufferList = [];
      
            if (bodyData) {
              response.setHeader('content-type',
                                  'text/plain; charset=utf-8')
                                  
              response.end(bodyData)
            } else {
              response.end()
            }
        })
  
    }
  
  }
  
  
  let serv = http.createServer((request, response) => {
  
    if (routerTable[ request.url ] === undefined) {
      response.statusCode = 404
      response.end('page not found')
      return
    }
  
    routerTable[ request.url ](request, response)
  
  })
  
  serv.listen(3456)
